package functional.conception;

import java.util.Optional;
import java.util.stream.Stream;

/**
 *
 * @author Liu Yicong
 * @date 2025/10/7
 */
public class LazyEvaluation {

	public static void main(String[] args) {
		// 中间操作没有终端操作 => 不会有任何输出（惰性）
		Stream.of(1, 2, 3, 4)
				.map(n -> {
					System.out.println("map1 " + n);
					return n * 2;
				})
				.filter(n -> {
					System.out.println("filter1 " + n);
					return n > 4;
				});
		System.out.println("上面没有终端操作，所以上面的 map/filter 不会被执行。");

		// 有终端操作 count()，这时才执行所有必要的中间操作
		long count = Stream.of(1, 2, 3, 4)
				.map(n -> {
					System.out.println("map2 " + n);
					return n * 2;
				})
				.filter(n -> {
					System.out.println("filter2 " + n);
					return n > 4;
				})
				.count();
		System.out.println("count = " + count);

		System.out.println("=======短路=======");
		// 无限流 + 短路（findFirst）：只处理到第一个满足条件的元素就停止
		Optional<Integer> first = Stream.iterate(1, n -> n + 1)
				.map(n -> {
					System.out.println("iterate " + n);
					return n * 2;
				})
				.filter(n -> n > 10)
				.findFirst(); // 短路终端操作，会早停
		System.out.println("first > 10 = " + first.get());
	}
}
